package org.example.hypersonaltools.tool;

import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.beans.property.DoubleProperty;
import javafx.util.Duration;

import java.util.function.Function;

public class FunctionToAnimation {

    /**
     * 将函数表达式转换为 Timeline 动画
     *
     * @param property      需要动画化的属性（如 translateX, translateY）
     * @param function      函数表达式（如 y = f(x)）
     * @param startX        起始 x 值
     * @param endX          结束 x 值
     * @param duration      动画总时长
     * @param frameInterval 每帧的时间间隔
     * @return 返回 Timeline 对象
     */
    public static Timeline createAnimation(DoubleProperty property, Function<Double, Double> function,
                                           double startX, double endX, Duration duration, double frameInterval) {
        Timeline timeline = new Timeline();
        double totalFrames = duration.toMillis() / frameInterval; // 总帧数
        double step = (endX - startX) / totalFrames; // 每帧的 x 增量

        //如果startY不为null，就带入判断那一帧最接近y值，将这一帧作为起始帧
        for (double x = startX; x <= endX; x += step) {
            double y = function.apply(x); // 计算 y 值
            Duration frameTime = Duration.millis((x - startX) / (endX - startX) * duration.toMillis());
            KeyFrame keyFrame = new KeyFrame(frameTime, new KeyValue(property, y));
            timeline.getKeyFrames().add(keyFrame);
        }
        return timeline;
    }
}